home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 June / EnigmA AMIGA RUN 08 (1996)(G.R. Edizioni)(IT)[!][issue 1996-06][EARSAN CD VII].iso / earcd / amos / eaissu3b.lha / Source_Code / BD_Mandelbrot_Genarator.AMOS / BD_Mandelbrot_Genarator.amosSourceCode
AMOS Source Code  |  1995-12-30  |  6KB  |  269 lines

  1. R1#=-2.0
  2. R2#=0.6
  3. I1#=-1.0
  4. I2#=1.0
  5. ITER#=60
  6. FX#=0 : FY#=0
  7. F$=""
  8. CHOSEN=0
  9. Screen Open 0,354,256,16,Lowres
  10. Cls 0
  11. Screen Open 1,354,256,32,Lowres
  12. Screen Display 1,112,33,,
  13. Screen 1
  14. Palette ,,,,,,,,,,,,,,,,$0,$CC4,$F00,$C0,$C0C,$CC0,$F,$404,$C0,$FF,$FF0,$F44,$44F,$C40,$F44,$F00
  15. Limit Mouse 112,10 To 464,335
  16. Curs Off 
  17. Flash Off 
  18. Paper 0 : Ink 1 : Cls 0
  19. Gosub ABOUT
  20. Gosub SETMEN
  21. Do 
  22.    Do 
  23.       If F$=""
  24.          Menu Inactive(1,3)
  25.       Else 
  26.          Menu Active(1,3)
  27.       End If 
  28.       QUIT=0 : CHOSEN=0
  29.       Gosub SLCTMENU
  30.       Exit If CHOSEN>0 or QUIT>0
  31.    Loop 
  32.    If QUIT=1 Then Menu Off : Default : Edit 
  33.    Menu Off 
  34.    Menu Active(1,6)
  35.    Hide On 
  36.    RSTEP#=(R2#-R1#)/354
  37.    ISTEP#=(I2#-I1#)/256
  38.    For Y#=FY# To 256
  39.       RE#=R1#
  40.       IM#=I1#+Y#*ISTEP#
  41.       For X#=FX# To 354
  42.          If Mouse Key=2 Then Menu On : Show On : Exit 2
  43.          RE#=R1#+X#*RSTEP#
  44.          IC#=0
  45.          RC#=0
  46.          For IN#=1 To ITER#
  47.             RI#=RC#*RC#-IC#*IC#+RE#
  48.             IC#=RC#*IC#*2+IM#
  49.             RC#=RI#
  50.             If RC#>2 or RC#<-2 or IC#>2 or IC#<-2 Then Goto LAB
  51.          Next IN#
  52.          C=0 : Goto LABTWO
  53.          LAB:
  54.          C=Int(Sqr(255/ITER#*IN#))
  55.          LABTWO:
  56.          Plot X#,(255-Y#),C+16
  57.       Next X#
  58.       FX#=0
  59.    Next Y#
  60.    FX#=X# : FY#=Y#
  61.    Menu On : Show On 
  62. Loop 
  63. SETMEN:
  64. Menu$(1)=" Project "
  65. Menu$(2)=" Set "
  66. Menu$(3)=" Mandelbrot "
  67. Menu$(1,1)=" Clear  "
  68. Menu$(1,2)=" Load   "
  69. Menu$(1,3)=" Save   " : Menu Inactive(1,3)
  70. Menu$(1,4)=" Save As"
  71. Menu$(1,5)=" Plot   "
  72. Menu$(1,6)=" Expand " : Menu Inactive(1,6)
  73. Menu$(1,7)=" About  "
  74. Menu$(1,8)=" Quit   "
  75. Menu$(2,1)=" Real Min "
  76. Menu$(2,2)=" Real Max "
  77. Menu$(2,3)=" Imag Min "
  78. Menu$(2,4)=" Imag Max "
  79. Menu$(2,5)="Iterations"
  80. Menu$(2,6)=" Default  "
  81. Menu$(3,1)="(SS 4)by Bob Devries(SS 0)" : Menu Inactive(3,1)
  82. Menu On 
  83. Return 
  84. SLCTMENU:
  85. If Choice
  86.    If Choice(1)=1
  87.       If Choice(2)=1
  88.          Cls 0 : FX#=0 : FY=0
  89.          Menu Inactive(1,6)
  90.       End If 
  91.       If Choice(2)=2
  92.          Gosub PICLOAD
  93.       End If 
  94.       If Choice(2)=3
  95.          Gosub PICSAVE
  96.       End If 
  97.       If Choice(2)=4
  98.          Gosub NEWNAME : Gosub PICSAVE
  99.       End If 
  100.       If Choice(2)=5
  101.          CHOSEN=1
  102.       End If 
  103.       If Choice(2)=6
  104.          Gosub ENLARGE
  105.       End If 
  106.       If Choice(2)=7
  107.          Gosub ABOUT
  108.       End If 
  109.       If Choice(2)=8
  110.          QUIT=1
  111.       End If 
  112.    End If 
  113.    If Choice(1)=2
  114.       If Choice(2)=1
  115.          Wind Save 
  116.          Wind Open 1,60,50,30,7,1
  117.          Centre "Current value : "+Str$(R1#)
  118.          Print : Centre "Input Real Axis" : Print 
  119.          Centre "minimum value " : Print 
  120.          Clear Key 
  121.          Input "  => ? ";R1#;
  122.          Wind Close 
  123.       End If 
  124.       If Choice(2)=2
  125.          Wind Save 
  126.          Wind Open 1,64,50,30,7,1
  127.          Centre "Current value : "+Str$(R2#)
  128.          Print : Centre "Input Real Axis" : Print 
  129.          Centre "maximum value " : Print 
  130.          Clear Key 
  131.          Input "  => ? ";R2#;
  132.          Wind Close 
  133.       End If 
  134.       If Choice(2)=3
  135.          Wind Save 
  136.          Wind Open 1,60,50,30,7,1
  137.          Centre "Current value : "+Str$(I1#)
  138.          Print : Centre "Input Imaginary Axis" : Print 
  139.          Centre "minimum value " : Print 
  140.          Clear Key 
  141.          Input "  => ? ";I1#;
  142.          Wind Close 
  143.       End If 
  144.       If Choice(2)=4
  145.          Wind Save 
  146.          Wind Open 1,60,50,30,7,1
  147.          Centre "Current value : "+Str$(I2#)
  148.          Print : Centre "Input Imaginary Axis" : Print 
  149.          Centre "maximum value " : Print 
  150.          Clear Key 
  151.          Input "  => ? ";I2#;
  152.          Wind Close 
  153.       End If 
  154.       If Choice(2)=5
  155.          Wind Save 
  156.          Wind Open 1,60,50,30,7,1
  157.          Centre "Current value : "+Str$(ITER#)
  158.          Print : Centre "Input Number of" : Print 
  159.          Centre "iterations" : Print 
  160.          Input "   => ?";ITER#
  161.          Wind Close 
  162.       End If 
  163.       If Choice(2)=6
  164.          R1#=-2.0
  165.          R2#=0.6
  166.          I1#=-1.0
  167.          I2#=1.0
  168.          ITER#=60
  169.          FX#=0
  170.          FY#=0
  171.       End If 
  172.    End If 
  173. End If 
  174. Return 
  175. PICLOAD:
  176. F$=Fsel$("*.iff")
  177. If F$<>""
  178.    Load Iff F$
  179.    Gosub VARLOD
  180.    Gosub STATUS
  181.    Menu Active(1,6)
  182. End If 
  183. Return 
  184. PICSAVE:
  185. Save Iff F$
  186. Gosub VARSAV
  187. Return 
  188. NEWNAME:
  189. F$=Fsel$("*.iff")
  190. Return 
  191. VARLOD:
  192. V$=Left$(F$,Len(F$)-4)+".var"
  193. If Exist(V$)
  194.    Open In 1,V$
  195.    Input #1,T$ : R1#=Val(T$)
  196.    Input #1,T$ : R2#=Val(T$)
  197.    Input #1,T$ : I1#=Val(T$)
  198.    Input #1,T$ : I2#=Val(T$)
  199.    Input #1,T$ : ITER#=Val(T$)
  200.    Input #1,T$ : FX#=Val(T$)
  201.    Input #1,T$ : FY#=Val(T$)
  202.    RSTEP#=(R2#-R1#)/320
  203.    ISTEP#=(I2#-I1#)/200
  204.    Close 1
  205. End If 
  206. Return 
  207. VARSAV:
  208. V$=Left$(F$,Len(F$)-4)+".var"
  209. Open Out 1,V$
  210. Print #1,Str$(R1#)
  211. Print #1,Str$(R2#)
  212. Print #1,Str$(I1#)
  213. Print #1,Str$(I2#)
  214. Print #1,Str$(ITER#)
  215. Print #1,Str$(X#)
  216. Print #1,Str$(Y#)
  217. Close 1
  218. Return 
  219. ABOUT:
  220. Wind Save 
  221. Wind Open 1,40,20,32,10,2
  222. Border 1,17,
  223. Centre "Mandelbrot Generator" : Print 
  224. Centre "from a programme" : Print 
  225. Centre "by Jeremy and Marty Spiller " : Print 
  226. Centre "AMOS conversion " : Print 
  227. Centre "by Bob Devries" : Print 
  228. Centre "28th April, 1991" : Print : Print 
  229. Centre "press either button"
  230. Repeat 
  231. Until Mouse Key
  232. Wind Close 
  233. Return 
  234. ENLARGE:
  235. F$=""
  236. Change Mouse 2
  237. Limit Mouse 124,22 To 464,335
  238. Repeat 
  239. Until Mouse Key
  240. XC#=X Mouse : YC#=Y Mouse
  241. XC#=XC#-112 : YC#=YC#-45
  242. XL#=XC#-20 : XH#=XC#+20
  243. YH#=YC#-12 : YL#=YC#+12
  244. XLOW#=R1#+XL#*RSTEP#
  245. XHIGH#=R1#+XH#*RSTEP#
  246. YLOW#=I1#+(289-YL#)*ISTEP#
  247. YHIGH#=I1#+(289-YH#)*ISTEP#
  248. R1#=XLOW# : R2#=XHIGH#
  249. I1#=YLOW# : I2#=YHIGH#
  250. FX#=0 : FY#=0 : Cls 0
  251. Menu Inactive(1,6)
  252. Menu Inactive(1,3)
  253. Change Mouse 1
  254. Limit Mouse 112,10 To 464,335
  255. Gosub STATUS
  256. Return 
  257. STATUS:
  258. Wind Save 
  259. Wind Open 1,64,50,25,7,2
  260. Fix(6)
  261. Print "Real min = ";R1#
  262. Print "Real max = ";R2#
  263. Print "Imag min = ";I1#
  264. Print "imag max = ";I2#
  265. Fix(16)
  266. Print "Iterations ";ITER#;
  267. Wait 150
  268. Wind Close 
  269. Return